package com.keepers.repair.net;

import com.keepers.repair.model.XmlRootModel;

import io.reactivex.Observable;
import okhttp3.ResponseBody;
import retrofit2.adapter.rxjava2.Result;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.Url;

/**
 * auth aboom
 * date 2018/10/21
 */
public interface LoaderService {

    /**
     * 获取测试信息
     *
     * @return Hello, World
     */
    @GET(value = "HelloWorld")
    Observable<Result<XmlRootModel>> hello();


    /**
     * 用户登录
     *
     * @param username 用户名
     * @param password 密码
     */
    @FormUrlEncoded
    @POST(value = "GetLogin")
    Observable<Result<XmlRootModel>> login(
            @Field(value = "userName") String username,
            @Field(value = "passWord") String password);


    /**
     * 用户退出
     *
     * @param userId 用户 ID
     */
    @GET(value = "ExitLogin")
    Observable<Result<XmlRootModel>> logout(
            @Query(value = "UserId") String userId
    );


    /**
     * 上传聊天语音
     *
     * @param FileInfor 语音文件流信息
     * @param SaveName  文件保存名
     * @param UserID    用户 ID
     * @param GroupGid  用户组 ID
     * @param WhenLong  语音时长
     */
    @FormUrlEncoded
    @POST(value = "SaveChatVoice")
    Observable<Result<XmlRootModel>> saveChatVoice(
            @Field(value = "FileInfor") String FileInfor,
            @Field(value = "SaveName") String SaveName,
            @Field(value = "UserID") String UserID,
            @Field(value = "GroupGid") String GroupGid,
            @Field(value = "WhenLong") int WhenLong
    );


    /**
     * 下载聊天语音
     *
     * @param url 语音文件地址
     */
    @GET
    Observable<Result<ResponseBody>> downloadChatVoice(@Url String url);


    /**
     * 修改密码
     *
     * @param userGid  用户 ID
     * @param password 新的密码
     */
    @GET(value = "SetPassWord")
    Observable<Result<XmlRootModel>> setPassword(
            @Query(value = "UserGid") String userGid,
            @Query(value = "password") String password);


    /**
     * 获取通知列表
     *
     * @param groupGid 用户组 ID
     * @param userGid  用户 ID
     */
    @GET(value = "GetNoticeListByID")
    Observable<Result<XmlRootModel>> getNoticeList(
            @Query(value = "GroupGid") String groupGid,
            @Query(value = "UserGid") String userGid
    );


    /**
     * 获取指定用户任务信息
     *
     * @param groupGid 用户组 ID
     * @param userGid  用户 ID
     * @param type     （0今天 -1明天）
     * @return
     */
    @GET(value = "GetTaskListByID")
    Observable<Result<XmlRootModel>> getTaskList(@Query(value = "GroupGid") String groupGid,
                                                 @Query(value = "UserGid") String userGid,
                                                 @Query(value = "type") int type);


    /**
     * 获取指定任务的线路信息和线路上的地点信息
     *
     * @param taskGid 任务id
     */
    @GET(value = "GetLineAndPlaceInforByID")
    Observable<Result<XmlRootModel>> getLineAngdPlaceInforByID(@Query(value = "TaskGid") String taskGid);


    /**
     * 统计报表接口
     */
    @GET(value = "SubmitRepairTask")
    Observable<Result<XmlRootModel>> submitRepairTask(@Query(value = "UserId") String userGid);


    /**
     * 获取用户任务列表
     *
     * @param groupGid 用户组 ID
     * @param userGid  用户 ID
     */
    @GET(value = "GetRepairTaskList")
    Observable<Result<XmlRootModel>> GetRepairTaskList(
            @Query(value = "GroupGid") String groupGid,
            @Query(value = "UserId") String userGid
    );

    /**
     * 获取维修单列表
     *
     * @param groupGid 用户组 ID
     * @param userId   用户 ID
     */
    @GET(value = "GetRepairList")
    Observable<Result<XmlRootModel>> getRepairList(
            @Query(value = "UserID") String userId,
            @Query(value = "GroupGid") String groupGid
    );

    /**
     * 生成维修单
     *
     * @param userId       操作用户 ID
     * @param groupGid     操作用户所属组织 ID
     * @param gpsId        巡检数据 ID
     * @param repairUserId 要分配德维修人员 ID
     * @param repairInfo   检修信息
     * @return 生成维修单结果
     */
    @GET(value = "SubmitRepairInfor")
    Observable<Result<XmlRootModel>> makeRepair(
            @Query(value = "UserId") String userId,
            @Query(value = "GroupGid") String groupGid,
            @Query(value = "GPSID") String gpsId,
            @Query(value = "RepairUserID") String repairUserId,
            @Query(value = "RepairInfor") String repairInfo
    );

    /**
     * 获取检修人员信息列表
     *
     * @param userId   用户id
     * @param groupGid 组织机构id
     * @param type     1管理员 2巡逻员 3检修员
     */
    @GET(value = "GetOverhaulList")
    Observable<Result<XmlRootModel>> getOverhaulList(@Query(value = "UserId") String userId,
                                                     @Query(value = "GroupGid") String groupGid,
                                                     @Query(value = "RoleType") int type);


    /**
     * 上传检修结果
     *
     * @param rGid   维修单ID
     * @param record 维修记录说明
     * @return 上传结果
     */
    @GET(value = "SubmitOverhaulResult")
    Observable<Result<XmlRootModel>> uploadOverhaulResult(
            @Query(value = "RGid") String rGid,
            @Query(value = "MaintenanceRecord") String record
    );

    /**
     * 上传维修单文件
     *
     * @param fileStr  文件 Base64 字符串
     * @param fileName 文件保存名
     * @param type     文件类型（1：音频 2：视频 3:图片）
     * @param rGid     维修单 ID
     * @return 上传文件的结果
     */
    @FormUrlEncoded
    @POST(value = "RepairUploadFiles")
    Observable<Result<XmlRootModel>> repairUploadFiles(
            @Field(value = "SaveName") String fileName,
            @Field(value = "type") int type,
            @Field(value = "RGid") String rGid,
            @Field(value = "Base64Str") String fileStr
    );


    /**
     * 上传sos信息
     *
     * @param base64Str   文件的文件流
     * @param saveName    保存为的名称
     * @param userGid     用户ID
     * @param treeGid     组织机构
     * @param taskGid     任务ID
     * @param taskPGid    任务明细ID
     * @param placeGid    点位ID
     * @param devicePhone 设备号
     * @param longitude   经度
     * @param latitude    纬度
     * @param dataTime    日期
     */
    @FormUrlEncoded
    @POST(value = "SaveSOSInfor")
    Observable<Result<XmlRootModel>> SaveSOSInfor(@Field(value = "Base64Str") String base64Str,
                                                  @Field(value = "SaveName") String saveName,
                                                  @Field(value = "UserGid") String userGid,
                                                  @Field(value = "TreeGid") String treeGid,
                                                  @Field(value = "TaskGid") String taskGid,
                                                  @Field(value = "TaskPGid") String taskPGid,
                                                  @Field(value = "PlaceGid") String placeGid,
                                                  @Field(value = "DevicePhone") String devicePhone,
                                                  @Field(value = "Longitude") String longitude,
                                                  @Field(value = "Latitude") String latitude,
                                                  @Field(value = "DataTime") String dataTime

    );

    /**
     * 获取组内人员信息
     *
     * @param groupGid 用户组 ID
     */
    @GET(value = "GetGroupListByID")
    Observable<Result<XmlRootModel>> getUserList(
            @Query("GroupGid") String groupGid
    );

    /**
     * 获取组内在线人员
     *
     * @param groupGid 用户组 ID
     */
    @GET(value = "OnlineUserID")
    Observable<Result<XmlRootModel>> getOnlineUserList(
            @Query("GroupGid") String groupGid
    );
}

